import router from './router';
import store from './store';
import { Message } from 'element-ui';
import NProgress from 'nprogress'; // progress bar
import 'nprogress/nprogress.css';// progress bar style
import { getToken } from '@/utils/auth'; // getToken from cookie

NProgress.configure({ showSpinner: false });// NProgress Configuration

// permission judge function
function hasPermission(roles, permissionRoles) {
    if (roles.indexOf('admin') >= 0) return true; // admin permission passed directly
    if (!permissionRoles) return true;
    return roles.some(role => permissionRoles.indexOf(role) >= 0);
}

const whiteList = ['/login', '/register', '/auth-redirect'];// no redirect whitelist

router.beforeEach((to, from, next) => {
    NProgress.start(); // start progress bar
    if (getToken()) { // determine if there has token
    /* has token*/
        if (to.path === '/login') {
            next({ path: '/ethereum/index' });
            NProgress.done(); // if current page is dashboard will not trigger	afterEach hook, so manually handle it
        } else {
            store.dispatch('GetUserInfo').then(res => {
                store.dispatch('GenerateRoutes', {roles: ['admin']}).then(() => {
                    router.addRoutes(store.getters.addRouters);
                    next();
                }).catch((err) => {
                    store.dispatch('FedLogOut').then(() => {
                        next({ path: '/' });
                    });
                });
            });
        }
    } else {
    /* has no token*/
        if (whiteList.indexOf(to.path) !== -1) { // 在免登录白名单，直接进入
            next();
        } else {
            next(`/login?redirect=${to.path}`); // 否则全部重定向到登录页
            NProgress.done(); // if current page is login will not trigger afterEach hook, so manually handle it
        }
    }
});

router.afterEach(() => {
    NProgress.done(); // finish progress bar
});
